trivial-httpd: use PR_SET_PDEATHSIG by default
authorColin Walters <walters@verbum.org>
Mon, 8 Dec 2014 19:44:44 +0000 (14:44 -0500)
committerColin Walters <walters@verbum.org>
Mon, 8 Dec 2014 19:47:37 +0000 (14:47 -0500)
If we're not daemonizing, this is a useful way to ensure we go away if
our parent does.

https://bugzilla.gnome.org/show_bug.cgi?id=741264

src/ostree/ot-builtin-trivial-httpd.c

index 31c541a4fbb5f92cdd1af89d169700f100c2b530..f4e303c6e90d0c5dd1fb40efff1d0f4e285f07fd 100644 (file)
@@ -28,6 +28,8 @@
 #include "otutil.h"
 
 #include <sys/socket.h>
+#include <sys/prctl.h>
+#include <signal.h>
 
 static char *opt_port_file = NULL;
 static gboolean opt_daemonize;
@@ -390,7 +392,7 @@ ostree_builtin_trivial_httpd (int argc, char **argv, GCancellable *cancellable,
 #if !SOUP_CHECK_VERSION(2, 48, 0)
   soup_server_run_async (server);
 #endif
-
+  
   if (opt_daemonize)
     {
       pid_t pid = fork();
@@ -411,6 +413,21 @@ ostree_builtin_trivial_httpd (int argc, char **argv, GCancellable *cancellable,
       fclose (stdout);
       fclose (stdin);
     }
+  else
+    {
+      /* Since we're used for testing purposes, let's just do this by
+       * default.  This ensures we exit when our parent does.
+       */
+      if (prctl (PR_SET_PDEATHSIG, SIGTERM) != 0)
+        {
+          int errsv = errno;
+          if (errsv != ENOSYS)
+            {
+              ot_util_set_error_from_errno (error, errsv);
+              goto out;
+            }
+        }
+    }
 
   app->running = TRUE;
   if (opt_autoexit)